package src.main.dailimoshi.dongtaidaili;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**动态代理类*/
public class DynamicProxySale implements InvocationHandler {
    /**被代理对象*/
    private Object object;
    /**三个参数固定写死，一个是获取getClassLoader 第二个获取代理类接口 第三个是动态代理类本身*/
    public Object getProxySale(){
        // 三个参数固定写死 一个是获取getClassLoader 第二个获取代理类接口 第三个是动态代理类本身
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
    }
    /**
     * 实现接口的invoke方法
     * @param proxy 被代理的对象
     * @param method 被代理对象的方法
     * @param args method 方法的参数列表
     * @return method 方法的返回值
     * 可以在调用目标对象方法之前或之后执行任意代理逻辑
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("方法前："+method.getName());
        System.out.println("寻找商品···");
        Object result = method.invoke(this.object, args);//此处注意传入的对象
        System.out.println("售卖商品···");
        System.out.println("方法后："+method.getName());
        return result;
    }

    public void setObject(Object object) {
        this.object = object;
    }
}
